package org.javacore.colgoogle;

import com.google.common.base.Function;
import com.google.common.collect.MapMaker;

import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;

/**
 * Created by 子木 on 2016/2/20.
 */
public class MapMakerT0 {
	public static void main(String[] args) {
		/**
		 * expiration(3, TimeUnit.SECONDS)设置超时时间为3秒
		 */
		ConcurrentMap<String, String> map = new MapMaker().concurrencyLevel(32).softKeys().weakValues()
				.expiration(3, TimeUnit.SECONDS).makeComputingMap(
						/**
						 * 提供当Map里面不包含所get的项，可以自动加入到Map的功能
						 * 可以将这里的返回值放到对应的key的value中
						 */
						new Function<String, String>() {
							public String apply(String s) {
								return "creating " + s + " -> Object";
							}
						});

		map.put("a", "testa");
		map.put("b", "testb");

		System.out.println(map.get("a"));
		System.out.println(map.get("b"));
		System.out.println(map.get("c"));

		try {
			// 4秒后，大于超时时间，缓存失效。
			Thread.sleep(4000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println(map.get("a"));
		System.out.println(map.get("b"));
		System.out.println(map.get("c"));
	}
}
